package com.giveu.signature.common.util;

import com.giveu.common.utils.DateUtil;
import com.giveu.common.utils.FileUtil;
import com.giveu.signature.bean.HtmlTemplate;
import com.giveu.signature.bean.HtmlTemplate.CssStyle;
import com.itextpdf.html2pdf.ConverterProperties;
import com.itextpdf.html2pdf.HtmlConverter;
import com.itextpdf.html2pdf.attach.impl.layout.HtmlPageBreak;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.AreaBreak;
import com.itextpdf.layout.element.IBlockElement;
import com.itextpdf.layout.element.IElement;
import com.itextpdf.layout.font.FontProvider;
 
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
/**
* by 明明如月 github :https://github.com/chujianyun
*/
 
public class Html2PdfUtil {
	
	public static void main(String[] args) throws Exception {
		Map<String, Object> map = new HashMap<String, Object>();
		Map<String, Object> customer = new HashMap<String, Object>();
		customer.put("name", "张三");
		customer.put("ident", "43215548746465465588");
		Map<String, Object> bankcard = new HashMap<String, Object>();
		bankcard.put("accountName", "张三");
		bankcard.put("accountNo", "43215548746465465588");
		bankcard.put("bankName", "浦发银行");
		customer.put("bankcard", bankcard);
		map.put("customer", customer);
		map.put("signDate", DateUtil.getNowDate());
//		map.put("title", "代扣服务授权书");
//		map.put("content1", "本人同意并授权深圳即有分期信息科技有限公司及通过深圳即有分期信息科技有限公司运营的即有钱包APP互联网平台（包括但不限于网站、移动客户端、微信客户端以及深圳即有分期信息科技有限公司不时以公告形式发布的新的网址、客户端等）为本人提供消费分期服务的主体【包括但不限于深圳前海达飞金融服务有限公司深圳风豹互联网科技有限公司（下称“即有分期”）及其指定合作方或贷款人】（以下统称为“有权发起代扣的主体”）在本人对其负有应付款项时通过向银行或第三方支付机构（简称“第三方机构”）发出扣划指令的方式，从本人此次绑定的银行账户中扣划约定的款项用于偿还本人的欠款。");
		
//		String content1 = "";
//		HtmlTemplate ht = new HtmlTemplate();
//		ht.setTitle(new CssStyle("代扣服务授权书").setTitle());
//		List<CssStyle> sectionList = new ArrayList<>();
//		sectionList.add(new CssStyle(content1));
//		sectionList.add(new CssStyle("本人姓名：${customer.name}"));
//		sectionList.add(new CssStyle("身份证号：${customer.ident}"));
//		sectionList.add(new CssStyle("账户名：${customer.bankcard.accountName}"));
//		sectionList.add(new CssStyle("账号：${customer.bankcard.accountNo}"));
//		sectionList.add(new CssStyle("开户行信息：${customer.bankcard.bankName}"));
//		sectionList.add(new CssStyle("<br/>"));
//		sectionList.add(new CssStyle("本授权书经本人点击确认后生效。"));
//		sectionList.add(new CssStyle("特此授权！"));
//		sectionList.add(new CssStyle("<br/>"));
//		sectionList.add(new CssStyle("客户签章：","right",65));
//		sectionList.add(new CssStyle("${signDate}","right",25));
//		ht.setSectionList(sectionList);
//		map.put("template", ht);
		//		String html = FreeMarkToHtml.freeMarkerRender(map, "here.html", "C:\\Users\\520878\\Desktop\\");
//		String html = FreeMarkToHtml.freeMarkerRender(FileUtil.readStringContent("C:\\Users\\520878\\Desktop\\here2.html"),map);
		String html = FileUtil.readStringContent("C:\\Users\\520878\\Desktop\\here.html");
		String html2 = FreeMarkUtil.renderStr(html,map);
		html2Pdf(html2, "C:\\Users\\520878\\Desktop\\test2.pdf");
//		test2();
	}
 

	/**
     * 字体所在目录
     */
    private static final String FONT_RESOURCE_DIR = "C:\\Windows\\Fonts";
 
    /**
     * @param htmlContent html文本
     * @param dest        目的文件路径，如 /xxx/xxx.pdf
     * @throws IOException IO异常
     */
    public static void html2Pdf(String htmlContent, String dest) throws IOException {
        ConverterProperties props = new ConverterProperties();
        props.setCharset("UFT-8");
        FontProvider fp = new FontProvider();
        fp.addStandardPdfFonts();
        String resources = "E:\\GIT-ADMIN\\my\\giveu-signature\\giveu-signature-service\\src\\main\\resources\\fonts";
        fp.addDirectory(resources);
        props.setFontProvider(fp);
        // html中使用的图片等资源目录（图片也可以直接用url或者base64格式而不放到资源里）
        // props.setBaseUri(resources); 
        List<IElement> elements = HtmlConverter.convertToElements(htmlContent, props);
        PdfDocument pdf = new PdfDocument(new PdfWriter(dest));
        Document document = new Document(pdf);
        for (IElement element : elements) {
            if (element instanceof HtmlPageBreak) {
                document.add((HtmlPageBreak) element);
            } else {
                document.add((IBlockElement) element);
            }
        }
        document.close();
    }

	public static void html2Pdf(String htmlContent, OutputStream out) throws IOException {
		ConverterProperties props = new ConverterProperties();
        props.setCharset("UFT-8");
        FontProvider fp = new FontProvider();
        fp.addStandardPdfFonts();
        String resources = "E:\\GIT-ADMIN\\my\\giveu-signature\\giveu-signature-service\\src\\main\\resources\\fonts";
        fp.addDirectory(resources);
        props.setFontProvider(fp);
        // html中使用的图片等资源目录（图片也可以直接用url或者base64格式而不放到资源里）
        // props.setBaseUri(resources); 
        List<IElement> elements = HtmlConverter.convertToElements(htmlContent, props);
        PdfDocument pdf = new PdfDocument(new PdfWriter(out));
        Document document = new Document(pdf);
        for (IElement element : elements) {
            if (element instanceof HtmlPageBreak) {
                document.add((HtmlPageBreak) element);
            } else {
                document.add((IBlockElement) element);
            }
        }
        document.close();
	}
}
